/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package SintaticoPacote;

import compilador_full.*;

/**
 *
 * @author Jomas
 */
public class EstruturasFormas {

    cmd cmd = new cmd();

    public boolean  sintaxe_Include (TabelaSimbolos tabelasimbolos) {
        String retorno = "";
        while (tabelasimbolos.getLookahead().equals("include")) {
            if (tabelasimbolos.reconhecer("include") && tabelasimbolos.reconhecer("<"))
                if (tabelasimbolos.getTipo().equals("identificador")) {
                    tabelasimbolos.soConsome();
                    if ( tabelasimbolos.reconhecer(".") && tabelasimbolos.reconhecer("h") &&  tabelasimbolos.reconhecer(">"))
                       retorno = "certo";
                    else
                       return false;
                } else
                    return false;
            else
                return false;
        }
        return true;
     }

    public boolean  sintaxe_Main (TabelaSimbolos tabelasimbolos) {
        if (tabelasimbolos.reconhecer("void") && tabelasimbolos.reconhecer("main") && tabelasimbolos.reconhecer("(") && tabelasimbolos.reconhecer(")")
                && tabelasimbolos.reconhecer("{") &&
                cmd.sintaxeCmd(tabelasimbolos) && // manda quase ára recursivamente A sintaxe de declaracao//Creio que neste ponto temos que verificar se há um "cmd" aqui.By Wilson
                sintaxe_Declaracao(tabelasimbolos) &&
                tabelasimbolos.reconhecer("}"))
           return true;
        else
           return false;
    }

    public boolean  sintaxe_Declaracao (TabelaSimbolos tabelasimbolos) {

       boolean retorno = false;
       while (!tabelasimbolos.getLookahead().equals("}")) {
           if (tabelasimbolos.getTipo().equals("identificador") || tabelasimbolos.getTipo().equals("numero")) {
                    tabelasimbolos.soConsome();
                    if (tabelasimbolos.reconhecer("=")) {
                        if (tabelasimbolos.getTipo().equals("identificador") || tabelasimbolos.getTipo().equals("numero")) {
                            tabelasimbolos.soConsome();
                                if (tabelasimbolos.getTipo().equals("operador")) {
                                    tabelasimbolos.soConsome();
                                    if (tabelasimbolos.getTipo().equals("identificador") || tabelasimbolos.getTipo().equals("numero")) {
                                        tabelasimbolos.soConsome();
                                        if (tabelasimbolos.reconhecer(";"))
                                            retorno = true;
                                        else
                                            return false;
                                    } else
                                        return false;
                                } else
                                    return false;
                            } else
                                return false;
                    } else
                        return false;
            } else
                return false;
       }
       return true;
    }
}
